BaseProtocolServer
Базовый класс для серверов протоколов (FIX, SBE и т. д.). Содержит общую инфраструктуру: жизненный цикл, сеансы, подписки, каналы сообщений, фоновые задачи.
Наследует: BaseLogReceiver
Реализует: IProtocolServer, ILogReceiver, ILogSource, IDisposable
Конструкторы
protected BaseProtocolServer(TSettings settings)
baseProtocolServer = BaseProtocolServer(settings)
Инициализирует новый экземпляр.
- settings
- Настройки сервера.
Свойства
protected LoginRateLimiter LoginRateLimiter { get; private set; }
value = baseProtocolServer.LoginRateLimiter
baseProtocolServer.LoginRateLimiter = value
Ограничитель скорости для попыток входа (общий для всех слушателей).
public IEnumerable<IMessageListenerSession> Sessions { get; }
value = baseProtocolServer.Sessions
Активные сеансы.
public ChannelStates State { get; protected set; }
value = baseProtocolServer.State
baseProtocolServer.State = value
Получает базовое хранилище.
Методы
public void AddSubscription(ServerSubscription subscription)
baseProtocolServer.AddSubscription(subscription)
Добавить подписку.
- subscription
- Подписка.
protected virtual void ClearState()
baseProtocolServer.ClearState()
Очистить все состояние: прослушиватели, сеансы, подписки.
protected string Convert(string value)
result = baseProtocolServer.Convert(value)
Преобразование текста в латиницу, если это настроено.
protected abstract TSubscription CreateSubscription(TClientSession session, string requestId, ServerSubscription subscription, MessageTypes type)
result = baseProtocolServer.CreateSubscription(session, requestId, subscription, type)
Создайте экземпляр информации о подписке.
public void Disconnect(IMessageListenerSession session)
baseProtocolServer.Disconnect(session)
Отключить сеанс.
- session
- Сессия.
protected override void DisposeManaged()
baseProtocolServer.DisposeManaged()
Освободите ресурсы.
protected void EnqueueMessage(TClientSession session, string requestId, Func<TSubscription, TClientSession, string, CancellationToken, ValueTask> handler, CancellationToken cancellationToken)
baseProtocolServer.EnqueueMessage(session, requestId, handler, cancellationToken)
Поставить сообщение в очередь для сеанса с идентификатором запроса.
protected void EnqueueMessage(TSubscription subscription, TClientSession session, string requestId, Func<TSubscription, TClientSession, string, CancellationToken, ValueTask<bool>> handler, CancellationToken cancellationToken)
baseProtocolServer.EnqueueMessage(subscription, session, requestId, handler, cancellationToken)
Основная очередь: планирование работы в сеансе клиента.
protected void EnqueueMessage(TSubscription[] subscribers, Func<TSubscription, TClientSession, string, CancellationToken, ValueTask> handler, CancellationToken cancellationToken)
baseProtocolServer.EnqueueMessage(subscribers, handler, cancellationToken)
Поставить сообщение в очередь для нескольких подписчиков.
protected void EnqueueMessage(TSubscription[] subscribers, Func<TSubscription, TClientSession, string, CancellationToken, ValueTask<bool>> handler, CancellationToken cancellationToken)
baseProtocolServer.EnqueueMessage(subscribers, handler, cancellationToken)
Поставить сообщение в очередь для нескольких подписчиков (с логическим результатом).
protected void EnqueueMessage(TSubscription subscription, Func<TSubscription, TClientSession, string, CancellationToken, ValueTask> handler, CancellationToken cancellationToken)
baseProtocolServer.EnqueueMessage(subscription, handler, cancellationToken)
Поставьте сообщение в очередь для одной подписки.
protected void EnqueueMessage(TSubscription subscription, Func<TSubscription, TClientSession, string, CancellationToken, ValueTask<bool>> handler, CancellationToken cancellationToken)
baseProtocolServer.EnqueueMessage(subscription, handler, cancellationToken)
Поставить сообщение в очередь для одной подписки (с логическим результатом).
protected void EnqueueMessage(TClientSession session, Func<TSubscription, TClientSession, string, CancellationToken, ValueTask> handler, CancellationToken cancellationToken)
baseProtocolServer.EnqueueMessage(session, handler, cancellationToken)
Поставить сообщение в очередь для сеанса (без идентификатора запроса).
protected abstract string GetSessionKey(TClientSession session)
result = baseProtocolServer.GetSessionKey(session)
Получите ключ, используемый для группировки клиентских сеансов (e.g. SenderCompId).
public IEnumerable<ServerSubscription> GetSubscriptions(IMessageListenerSession session)
result = baseProtocolServer.GetSubscriptions(session)
Получить подписку на указанную сессию.
- session
- Сессия.
Возвращает: Подписки.
public bool HasSubscriptions(DataType dataType, SecurityId securityId)
result = baseProtocolServer.HasSubscriptions(dataType, securityId)
Есть подписчики.
protected abstract bool IsStubSubscription(TSubscription subscription)
result = baseProtocolServer.IsStubSubscription(subscription)
Проверьте, является ли подписка заглушкой (заполнителем).
public override void Load(SettingsStorage storage)
baseProtocolServer.Load(storage)
Загрузить настройки.
- storage
- Хранилище настроек.
protected abstract void OnClearListenerState()
baseProtocolServer.OnClearListenerState()
Очистить состояние прослушивателя для конкретного протокола (остановить прослушиватели и т. д.).
protected abstract void OnStartListeners(CancellationToken cancellationToken)
baseProtocolServer.OnStartListeners(cancellationToken)
Запустите прослушиватели для конкретного протокола (TCP и т. д.). Добавляйте задачи в _backgroundTasks.
protected abstract void ProcessInMessage(Message message, CancellationToken cancellationToken)
baseProtocolServer.ProcessInMessage(message, cancellationToken)
Обработать входящее сообщение и направить его подписанным клиентам.
protected virtual void ProcessLogout(TClientSession session)
baseProtocolServer.ProcessLogout(session)
Обработать выход/отключение клиента.
protected void RaiseNewOutMessage(IMessageListenerSession session, Message message)
baseProtocolServer.RaiseNewOutMessage(session, message)
Напишите исходящее сообщение на канал.
protected void RaiseSessionConnected(IMessageListenerSession session)
baseProtocolServer.RaiseSessionConnected(session)
Вызов события подключения сеанса.
protected void RaiseSessionDisconnected(IMessageListenerSession session)
baseProtocolServer.RaiseSessionDisconnected(session)
Вызов события отключения сеанса.
public bool RemoveSubscription(ServerSubscription subscription)
result = baseProtocolServer.RemoveSubscription(subscription)
Удалить подписку.
- subscription
- Подписка.
Возвращает: если подписка найдена, иначе .
public bool Resume(ServerSubscription subscription)
result = baseProtocolServer.Resume(subscription)
Возобновите подписку.
- subscription
- Подписка.
Возвращает: если подписка найдена, иначе .
public void Resume(IMessageListenerSession session)
baseProtocolServer.Resume(session)
Возобновить сеанс.
- session
- Сессия.
public IAsyncEnumerable<ValueTuple<IMessageListenerSession, Message>> RunAsync(CancellationToken cancellationToken)
result = baseProtocolServer.RunAsync(cancellationToken)
Запустите асинхронную обработку сообщений и возвращайте исходящие сообщения как IAsyncEnumerable. Открывает сервер в начале и закрывается в конце.
public override void Save(SettingsStorage storage)
baseProtocolServer.Save(storage)
Сохраните настройки.
- storage
- Хранилище настроек.
protected abstract void ScheduleSessionWork(TClientSession session, ServerSubscription subscription, string requestId, Func<TClientSession, string, CancellationToken, ValueTask<bool>> handler)
baseProtocolServer.ScheduleSessionWork(session, subscription, requestId, handler)
Запланируйте работу в исходящей очереди клиентского сеанса.
public virtual bool SendInMessage(Message message)
result = baseProtocolServer.SendInMessage(message)
Отправьте входящее сообщение на сервер для обработки и маршрутизации клиентам.
protected void StartServer(CancellationToken cancellationToken)
baseProtocolServer.StartServer(cancellationToken)
Запустите сервер: инициализируйте состояние, запустите прослушиватели и фоновые задачи.
protected void StopServer()
baseProtocolServer.StopServer()
Остановите сервер: отмените задачи, завершите каналы, очистите состояние.
public void Suspend(IMessageListenerSession session)
baseProtocolServer.Suspend(session)
Приостановить сеанс.
- session
- Сессия.
public bool Suspend(ServerSubscription subscription)
result = baseProtocolServer.Suspend(subscription)
Приостановить подписку.
- subscription
- Подписка.
Возвращает: если подписка найдена, иначе .
События
public event Action<IMessageListenerSession> SessionConnected
baseProtocolServer.SessionConnected += handler
Событие, связанное с сеансом.
public event Action<IMessageListenerSession> SessionDisconnected
baseProtocolServer.SessionDisconnected += handler
Событие отключения сеанса.
public event Action StateChanged
baseProtocolServer.StateChanged += handler
Событие изменения состояния.
public event Action<ServerSubscription> SubscriptionChanged
baseProtocolServer.SubscriptionChanged += handler
Событие изменения клиентской подписки.
Поля
protected readonly List<Task> _backgroundTasks
value = baseProtocolServer._backgroundTasks
Фоновые задачи (прием клиентов, обработка сообщений и т.д.).
protected readonly SynchronizedSet<long> _cancellationRequests
value = baseProtocolServer._cancellationRequests
Идентификаторы транзакций запроса на отмену отложенного ордера.
protected readonly SynchronizedSet<ServerSubscription> _changedSubscriptions
value = baseProtocolServer._changedSubscriptions
Измененные подписки ожидают уведомления.
protected readonly CachedSynchronizedDictionary<string, CachedSynchronizedList<TClientSession>> _clientSessions
value = baseProtocolServer._clientSessions
Клиентские сеансы сгруппированы по сеансовому ключу (e.g. SenderCompId).
protected readonly Channel<Message> _incomingMessages
value = baseProtocolServer._incomingMessages
Канал входящих сообщений.
protected readonly Channel<ValueTuple<IMessageListenerSession, Message>> _outgoingMessages
value = baseProtocolServer._outgoingMessages
Канал исходящих сообщений (пары сессия + сообщение).
protected readonly SubscriptionHolder<TSubscription, TClientSession> _subscriptions
value = baseProtocolServer._subscriptions
Держатель подписки.